/**
 * README
 * 
 * Modificacion de la biblioteca jWave disponible en http://code.google.com/p/jwave/
 * Convertidos los tipos de datos a float para agilizar el tratamiendo de grandes arrays de datos
 * como son los que se tratan en analisis genomicos.
 * Los autores originales de las funciones y del código de la biblioteca cuando fue seleccionada en
 * Abril de 2012 eran:
 *        Christian Scheiblich
 *        Thomas Leduc
 *        sashi
 *        Pol Kennel
 *        Thomas Haider
 *        
 * Por supuesto, todo el merito, honores y demas menciones sobre esta adaptacion les corresponden a ellos
 * y nada mas que a ellos.
 * 
 * 
 * This is a modified version of jWave, available in http://code.google.com/p/jwave/
 * It has been replace the double datatype with float for performance reasons in very big arrays used in
 * bioinformatics like genomic analysis.
 * Original authors of functions and the library when it has been selected in 2012's April were:
 *        Christian Scheiblich
 *        Thomas Leduc
 *        sashi
 *        Pol Kennel
 *        Thomas Haider
 *        
 * Of course, all the merits and mentions about this adaptation have corresponded to them.
 * 
 */

package ev.maths.handlers.wavelets;

/**
 * Coiflet de Ingrid Daubechies con seis coeficientes y sus escalas.
 * Normalizado a raiz de 2 - Normal euclídea.
 * 
 * @date 01.08.2012
 * @author Enrique Vázquez de Luis
 */
public class Coif06 extends Wavelet {

  /**
   * Constructor que dota de valores a los coeficiones y escalas para
   * la wavelet de Daubechies.
   * 
   * @date 01.08.2012
   * @author Enrique Vázquez de Luis
   */
  public Coif06( ) {

    _waveLength = 6; 

    float sqrt15 = (float)Math.sqrt( 15. );

    _scales = new float[ _waveLength ];

    _scales[ 0 ] = (float)(1.4142135623730951 * ( sqrt15 - 3. ) / 32.);
    _scales[ 1 ] = (float) (1.4142135623730951 * ( 1. - sqrt15 ) / 32.);
    _scales[ 2 ] = (float) (1.4142135623730951 * ( 6. - 2 * sqrt15 ) / 32.);
    _scales[ 3 ] = (float) (1.4142135623730951 * ( 2. * sqrt15 + 6. ) / 32.);
    _scales[ 4 ] = (float) (1.4142135623730951 * ( sqrt15 + 13. ) / 32.);
    _scales[ 5 ] = (float) (1.4142135623730951 * ( 9. - sqrt15 ) / 32.);

    _coeffs = new float[ _waveLength ];

    _coeffs[ 0 ] = _scales[ 5 ]; //    h5
    _coeffs[ 1 ] = -_scales[ 4 ]; //  -h4
    _coeffs[ 2 ] = _scales[ 3 ]; //    h3
    _coeffs[ 3 ] = -_scales[ 2 ]; //  -h2
    _coeffs[ 4 ] = _scales[ 1 ]; //    h1
    _coeffs[ 5 ] = -_scales[ 0 ]; //  -h0

  } // Coif06

} // class
